package org.spolo.android.support.enventmanager;

import java.util.List;
import java.util.Map;

/**
 * 整个应用的事件容器,需要对元素的事件进行管理的话都要实现此接口
 * 
 * @author chenzhongming
 * @date 2012-7-23
 */
public interface EventQueueInterface {

	/**
	 * 向队列中加入一个消息
	 * 
	 * @param key
	 *            事件的类型,类型详见{@link org.spolo.android.app.bean.GestureType}
	 * @param handler
	 *            当此元素触发此类事件的时候,改如何处理,也就是所要执行的回调对象
	 * 
	 */
	void addListener(int key, EventHandlerInterface handler);

	/**
	 * 从事件容器中移除指定类型的回调实现
	 * 
	 * @param listnerID
	 *            所要删除的事件类型
	 */
	void removeListner(int listnerID);

	/**
	 * 根据事件的类型从已注册的事件中取出并执行,也就算是事件的派发,或者是注入
	 * 
	 * @param key
	 *            事件的类型详见
	 * @param parm
	 *            此参数类型实际上使用的Action个Parameter这个包装类,所包含的具体内容见
	 *            {@link org.spolo.android.app.bean.ActionParameter}
	 */
	void publish(int key, Object parm);

	public Map<Integer, List<EventHandlerInterface>> getEventMap();
}
